# 参考第 9 节的综合案例中的学生信息管理，来实现一个自动取款机的存取款模 拟效果。要求有登陆和退出、查询余额、取钱，存钱等操作。


'''
    自动取款机的存取款模拟效果
    1.用户信息数据源
    2.查询余额
    3.取钱功能
    4.存钱功能
    5.退出系统
    6.用户登录密码判断 & 界面和交互
'''


# 1.用户信息数据源
users_data = [
    {'name':'zhangsan','cardid':'0000000000000001','balance':'100','password':'000001'},
    {'name':'lisi','cardid':'0000000000000002','balance':'200','password':'000002'},
    {'name':'wangwu','cardid':'0000000000000003','balance':'300','password':'000003'},
    {'name':'zhaoliu','cardid':'0000000000000004','balance':'400','password':'000004'}
]

# 定义一个空列表，存储当前登陆的用户信息
user_list = []

# 测试 1.用户信息数据源
# print(users_data)


# 2.查询余额
def check_balance():
    '''
    查询当前用户的账户余额
    :return:
    '''
    print('您的余额是： ',user_list[0]['balance'],'元')

# 测试 2.查询余额
# check_balance()


# 3.取钱功能
def withdraw_money():
    '''
    当前用户取钱功能
    :return:
    '''
    global user_list
    key_withdraw = input('请输入您要取款的金额： ')
    if int(key_withdraw) <= int(user_list[0]['balance']):
        user_list[0]['balance'] = int(user_list[0]['balance']) - int(key_withdraw)
        print('请收好钞票，您目前的账余额是： ',user_list[0]['balance'],'元')
    else:
        print('您的余额不足')

# 测试 3.取钱功能
# withdraw_money()


# 4.存钱功能
def deposit_money():
    '''
    当前用户存钱功能
    :return:
    '''
    global user_list
    key_deposit = input('请输入您要存款的金额： ')
    user_list[0]['balance'] = int(user_list[0]['balance']) + int(key_deposit)
    print('您目前的账余额是： ',user_list[0]['balance'],'元')

# 测试 4.存钱功能
# deposit_money()


# 5.退出系统
def log_out():
    print('=' * 12, '再见', '=' * 12)


# 6.用户登录密码判断
def log_in():
    '''
    判断登陆卡号和密码是否存在用户数据中，并将当前登录的用户信息存储在user_list中
    :return:
    '''
    global user_list
    key_id = input('请输入您的卡号： ')
    key_pswd = input('请输入您的密码： ')
    for i, user_dict in enumerate(users_data):
        if user_dict['cardid'] == key_id and user_dict['password'] == key_pswd:
            user_list.append(user_dict)
    if user_list != []:
        while True:
            # 输出一个初始界面
            print('='*14, '自动取款机', '='*14)
            print('{:1} {:<15} {:<15}'.format(' ', '1. 查询余额', '2. 取款'))
            print('{:1} {:<15} {:<15}'.format(' ', '3. 存款', '4. 退出系统'))
            print('=' * 40)
            key = input('请输入对应的选择')
            # 根据输入操作值，执行对应操作
            if key == '1':
                print('=' * 12, '余额显示', '=' * 12)
                check_balance()
                input('按回车继续： ')
            elif key == '2':
                print('=' * 12, '取款页面', '=' * 12)
                withdraw_money()
                input('按回车继续： ')
            elif key == '3':
                print('=' * 12, '存款页面', '=' * 12)
                deposit_money()
                input('按回车继续： ')
            elif key == '4':
                log_out()
                log_in()    #递归调用自己，回到登录的初始界面
            else:
                print('=' * 12, '操作无效', '=' * 12)
    else:
        print('您输入的卡号或密码错误，请重新输入')
        log_in()    #递归调用自己，回到登录的初始界面

# 测试 6.用户登录密码判断
log_in()